package com.company.pedidos.web.controller;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import com.company.canonical.beans.JsonJTableDetallePedidoBean;
import com.company.canonical.beans.JsonJTableOptionBean;
import com.company.canonical.beans.JsonJTablePedidoBean;
import com.company.pedidos.service.PedidosService;
import com.company.pedidos.web.command.PedidoCommand;
import com.company.pedidos.web.datatable.response.JtableJsonListResponse;

@SessionAttributes({ "pedidoIdParam" })
@Controller
public class PedidoController {
	private static final Logger logger = Logger
			.getLogger(PedidoController.class);

	@Autowired
	private PedidosService pedidosService;

	@ModelAttribute(value = "pedido")
	public PedidoCommand obtenerPedidoModel() {
		logger.debug("creating @ModelAttribute Pedido");
		PedidoCommand pedidoCommand = new PedidoCommand();
		return pedidoCommand;
	}

	/**
	 * 
	 * @return
	 */
	@RequestMapping(value = "/pedido/mostrar", method = RequestMethod.GET)
	public String inicioConsultaPedido(ModelMap modelMap) {
		List<JsonJTableOptionBean> listaEstado = null;
		try {
			listaEstado = pedidosService.listarEstadoPedido();
			modelMap.addAttribute("listaEstado", listaEstado);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "pedido/listaPedido";
	}

	/**
	 * @return
	 */
	@RequestMapping(value = "/pedido/buscar", method = RequestMethod.POST)
	@ResponseBody
	public JtableJsonListResponse<JsonJTablePedidoBean> buscarPedido(
			@ModelAttribute(value = "pedido") PedidoCommand pedido,
			@RequestParam(required = false, value = "jtStartIndex") int jtStartIndex,
			@RequestParam(required = false, value = "jtPageSize") int jtPageSize) {
		JtableJsonListResponse<JsonJTablePedidoBean> jsonString;
		List<JsonJTablePedidoBean> listaPedido;
		try {
			logger.debug("estado: "+ pedido.getEstado());
			logger.debug("fechaPedido: "+ pedido.getFechaPedido());
			logger.debug("codigoCliente: "+ pedido.getCodigoCliente());
			
			Long expenseCount = pedidosService.buscarPedidoCount(pedido.getFechaPedido(),
						pedido.getCodigoCliente(), pedido.getEstado());
			listaPedido = pedidosService.buscarPedido(pedido.getFechaPedido(),
					pedido.getCodigoCliente(), pedido.getEstado(),
					jtStartIndex, jtPageSize);

			jsonString = new JtableJsonListResponse<JsonJTablePedidoBean>("OK",
					listaPedido, expenseCount.intValue());
		} catch (Exception e) {
			jsonString = new JtableJsonListResponse<JsonJTablePedidoBean>(
					"ERROR", e.getMessage());
		}
		return jsonString;
	}

	/**
	 * @return
	 */
	@RequestMapping(value = "/pedido/detalle/mostrar")
	public String mostrarDetallePedido(ModelMap modelMap, @RequestParam int pedidoId) {
		logger.debug("Mostrar Detalle Pedido + " + pedidoId);
		modelMap.addAttribute("pedidoIdParam", pedidoId);
		return "pedido/detallePedido";
	}

	/**
	 * @return
	 */
	@RequestMapping(value = "/pedido/detalle/consulta", method = RequestMethod.POST)
	@ResponseBody
	public JtableJsonListResponse<JsonJTableDetallePedidoBean> mostrarDetallePedido(
			ModelMap modelMap) {
		JtableJsonListResponse<JsonJTableDetallePedidoBean> jsonString;
		List<JsonJTableDetallePedidoBean> listaDetallePedido;
		int pedidoId = (Integer) modelMap.get("pedidoIdParam");
		logger.debug("Consultar Detalle Pedido + " + pedidoId);

		try {
			listaDetallePedido = pedidosService.listaDetallePedido(pedidoId);
			jsonString = new JtableJsonListResponse<JsonJTableDetallePedidoBean>(
					"OK", listaDetallePedido, listaDetallePedido.size());
		} catch (Exception e) {
			jsonString = new JtableJsonListResponse<JsonJTableDetallePedidoBean>(
					"ERROR", e.getMessage());
		}
		return jsonString;
	}

	@RequestMapping(value = "/pedido/getEstadoOptions", method = RequestMethod.POST)
	@ResponseBody
	public List<JsonJTableOptionBean> listarEstadoPedido(
			ModelMap modelMap) {
		List<JsonJTableOptionBean> listaEstado = null;
		try {
			listaEstado = pedidosService.listarEstadoPedido();		
		} catch (Exception e) {			
		}
		return listaEstado;
	}

}
